package com.bryant.demo05

import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.media3.common.text.TextAnnotation.Position
import androidx.viewpager2.widget.ViewPager2
import com.bryant.demo05.storage.TokenPreferences


class MainActivity : AppCompatActivity() {
    /**
     * ViewPager2实例的可空变量声明
     *
     * 用于持有ViewPager2控件的引用，初始值为null
     * 通过可空类型确保在使用前进行空值检查
     */
    private var viewPager: ViewPager2? = null

    /**
     * ViewPager适配器实例
     * 用于管理ViewPager中各个页面的显示和切换
     * 该适配器负责创建和销毁页面视图，以及处理页面间的数据传递
     */
    private var adapter: ViewPagerAdapter? = null

    private var currentPosition: Int = 0

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.ac_main)

       /* // ------------------- 测试token持久化 -------------
        val token = TokenPreferences.getInstance(this).getToken()
        Toast.makeText(this, "token持久化测试: $token", Toast.LENGTH_SHORT).show()
        // ----------------------------------------*/


        // 1. 执行点击事件
        addClickEvent()

        // 2. 执行加载Fragment
        loadFragment()
        // 3. 恢复状态
        if(savedInstanceState != null){
            currentPosition = savedInstanceState.getInt("currentPosition", 0)
        }
        // 4. 恢复选中项
        viewPager?.currentItem = currentPosition
    }

    // 2. 定义点击事件
    private fun addClickEvent() {
        // 2.1 获取控件 - 先获取整个底部导航栏
        val bottomNavigationView = findViewById<ViewGroup>(R.id.llBottomNavigation)
        // 2.1.1 获取子控件
        val homeContainer = bottomNavigationView.findViewById<ViewGroup>(R.id.nav_home)
        val lifeContainer = bottomNavigationView.findViewById<ViewGroup>(R.id.nav_life)
        val profileContainer = bottomNavigationView.findViewById<ViewGroup>(R.id.nav_profile)

        // 2.2 统一给各控件添加点击事件
        homeContainer.setOnClickListener(
            object : View.OnClickListener {
                override fun onClick(v: View?) {
                    // a. 实现页面切换 - 第一个参数为切换至的页面索引， 第二个参数为是否平滑切换
                    viewPager?.setCurrentItem(0, true)
                    // b. 更新底部导航栏选中状态
                    setCurrentTab(0)
                }
            }
        )
        lifeContainer.setOnClickListener(
            object : View.OnClickListener {
                override fun onClick(v: View?) {
                    // a. 实现页面切换
                    viewPager?.setCurrentItem(1, true)

                    // b. 更新底部导航栏选中状态
                    setCurrentTab(1)
                }
            }
        )
        profileContainer.setOnClickListener(
            object : View.OnClickListener {
                override fun onClick(v: View?) {
                    // a. 实现页面切换
                    viewPager?.setCurrentItem(2, true)

                    // b. 更新底部导航栏选中状态
                    setCurrentTab(2)
                }
            }
        )
    }

    // 3. 统一设置底部导航栏选中状态方法
    fun setCurrentTab(position: Int) {
        // 1. 获取底层控件
        val bottomNavigationView = findViewById<ViewGroup>(R.id.llBottomNavigation)

        val tvHome = bottomNavigationView.findViewById<TextView>(R.id.tv_home)
        var imageHome = bottomNavigationView.findViewById<ImageView>(R.id.img_home)

        val tvLife = bottomNavigationView.findViewById<TextView>(R.id.tv_life)
        var imageLife = bottomNavigationView.findViewById<ImageView>(R.id.img_life)

        val tvProfile = bottomNavigationView.findViewById<TextView>(R.id.tv_profile)
        var imageProfile = bottomNavigationView.findViewById<ImageView>(R.id.img_profile)
        // 2. 根据位置设置各控件样式 -> 实现选中状态样式切换
        when (position) {
            0 -> {
                tvHome.setTextColor(resources.getColor(R.color.weather_primary, null))
                imageHome.setColorFilter(resources.getColor(R.color.weather_primary, null))
                tvLife.setTextColor(resources.getColor(R.color.default_gray, null))
                imageLife.setColorFilter(resources.getColor(R.color.default_gray, null))
                tvProfile.setTextColor(resources.getColor(R.color.default_gray, null))
                imageProfile.setColorFilter(resources.getColor(R.color.default_gray, null))
            }

            1 -> {
                tvHome.setTextColor(resources.getColor(R.color.default_gray, null))
                imageHome.setColorFilter(resources.getColor(R.color.default_gray, null))
                tvLife.setTextColor(resources.getColor(R.color.weather_primary, null))
                imageLife.setColorFilter(resources.getColor(R.color.weather_primary, null))
                tvProfile.setTextColor(resources.getColor(R.color.default_gray, null))
                imageProfile.setColorFilter(resources.getColor(R.color.default_gray, null))
            }

            2 -> {
                tvHome.setTextColor(resources.getColor(R.color.default_gray, null))
                imageHome.setColorFilter(resources.getColor(R.color.default_gray, null))
                tvLife.setTextColor(resources.getColor(R.color.default_gray, null))
                imageLife.setColorFilter(resources.getColor(R.color.default_gray, null))
                tvProfile.setTextColor(resources.getColor(R.color.weather_primary, null))
                imageProfile.setColorFilter(resources.getColor(R.color.weather_primary, null))
            }
        }
    }

    // 4. 定义加载Fragment事件
    private fun loadFragment() {
        // 1. 判断ViewPager是否存在， 不存在获取ViewPager2实例
        if (viewPager == null) {
            viewPager = findViewById(R.id.vpMain)

            // 设置不可滑动切换
            viewPager?.isUserInputEnabled = false
            // 注册页面切换监听
            viewPager?.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
                override fun onPageSelected(position: Int) {
                    super.onPageSelected(position)
                    // 1. 更新当前页面索引
                    currentPosition = position
                    // 2. 更新底部导航栏选中状态
                    setCurrentTab(position)
                }
            })
        }
        // 2. 创建适配器
        if (adapter == null) {
            adapter = ViewPagerAdapter(this)
        }
        // 3. 设置适配器
        viewPager?.adapter = adapter
        viewPager?.offscreenPageLimit = 2 // 缓存数量 - （0，1，2）
    }
}